package gui; import javafx.application.Platform; import javafx.beans.binding.DoubleBinding; import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.control.ContentDisplay; import javafx.scene.control.Label; import javafx.scene.control.TitledPane; import javafx.scene.image.Image; import javafx.scene.layout.*; /** * Created by tloehr on 17.09.15. */ public class FXTools { /** * https://community.oracle.com/message/11145722#11145722 * * @return */ public static TitledPane createTitledPane(Pane root, String text, Image icon, Node content, Node... buttons) { // final VBox root = new VBox(); final TitledPane titledPane = new TitledPane(); titledPane.setText(text); final HBox buttonBox = new HBox(5); buttonBox.getChildren().addAll(buttons); final Label label = new Label(); label.textProperty().bind(titledPane.textProperty()); final AnchorPane title = new AnchorPane(); AnchorPane.setLeftAnchor(label, 0.0); AnchorPane.setRightAnchor(buttonBox, 0.0); title.getChildren().addAll(label, buttonBox); titledPane.setGraphic(title); titledPane.setContent(content); titledPane.setContentDisplay(ContentDisplay.GRAPHIC_ONLY); titledPane.setExpanded(false); Platform.runLater(new Runnable() { @Override public void run() { final Region arrow = (Region) titledPane.lookup(".arrow-button"); title.prefWidthProperty().bind(new DoubleBinding() { { super.bind(arrow.widthProperty(), root.widthProperty()); } @Override protected double computeValue() { double breathingSpace = 20; double value = root.getWidth() - arrow.getWidth() - breathingSpace; return value; } }); } }); return titledPane; } }